package com.ck.chuangke.service;

import java.util.List;

import com.ck.exception.ServiceException;
import com.ck.model.chuangke.vo.CkDeviceDetailVO;
import com.ck.model.chuangke.vo.CkDeviceInfoListExportVO;
import com.ck.model.chuangke.vo.CkDeviceInfoListVO;
import com.ck.model.chuangke.vo.CkDeviceLogListVO;
import com.ck.model.chuangke.vo.CkUpgradeDeviceListVO;
import com.ck.model.common.User;
import com.ck.model.common.page.PageInfo;

/**
 * 
 * <p>Title: CkDeviceInfoService</p>  
 * <p>Description: 创客平台管理终端信息service</p>  
 * @author huangf 
 * @date 2018年6月22日
 */
public interface CkDeviceInfoService {
    /**
     * 获取终端总数
     * @return
     */
    Long getDeviceCount();

    /**
     * 根据大区查询终端总数
     * @param region 大区：东北NE，华北NC，华中CC，华东EC，华南SC，西北WN，西南WS
     * @return
     */
    Long getDeviceCountByRegion(String region);

    /**
     * 根据大区和状态查询终端总数
     * @param region 大区：东北NE，华北NC，华中CC，华东EC，华南SC，西北WN，西南WS
     * @param status 状态：0.在线; 1.离线
     * @return
     */
    Long getDeviceCountByRegionAndStatus(String region, Integer status);
    
    /**
     * 创客后台查看所有终端信息列表
     * @param startTime  终端创建时间-开始
     * @param endTime    终端创建时间-结束
     * @param deviceCode  终端机器码
     * @param deviceMac   终端mac地址
     * @param companyName 商家名称
     * @param deviceName 终端名
     * @param province 省
     * @param city 市
     * @param area 地区
     * @param pageNum  
     * @param pageSize
     * @return
     */
	PageInfo<CkDeviceInfoListVO> listByPage(Long startTime, Long endTime, String deviceCode, String deviceMac,
			String companyName, String deviceName, String province, String city, String area, Integer pageNum, Integer pageSize);
	
	 /**
     * 创客后台条件导出终端信息列表
     * @param startTime  终端创建时间-开始
     * @param endTime    终端创建时间-结束
     * @param deviceCode  终端机器码
     * @param deviceMac   终端mac地址
     * @param companyName 商家名称
     * @param deviceName 终端名称（备注）
     * @param province 省
     * @param city 市
     * @param area 地区
     * @return
     */
	List<CkDeviceInfoListExportVO> exportDeviceReport(Long start, Long end, String deviceCode, String deviceMac,
			String companyName, String deviceName,String province, String city, String area);
	
	/**
	 * 创客后台查询终端日志列表
	 * @param start  日志上传时间-开始
	 * @param end 日志上传时间-结束
	 * @param deviceCode 终端唯一编码
	 * @param logType 日志类型 @see LogType
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<CkDeviceLogListVO> listDeviceLogs(Long start, Long end, String deviceCode, String logType, Integer pageNum,
			Integer pageSize);
	
	/**
	 * 创客后台查询终端详情
	 * @param deviceCode
	 * @return
	 */
	CkDeviceDetailVO getDeviceDetail(String deviceCode);
	
	/**
	 * 创客升级终端软件版本（仅设置终端升级id）
	 * @param upgradeType  软件升级OR升级固件
	 * @param deviceCodes
	 * @param deviceUpgradeId
	 * @param remortIP
	 * @throws ServiceException 
	 */
	void deviceUpgrade(Integer upgradeType,String deviceCodes, Long deviceUpgradeId, User user,String remortIP) throws ServiceException;
	
	/**
	 * 查询所有终端中所有的mips版本号
	 *
	 * @return List<String>
	 */
    List<String> listAllSoftwareVersion();
    
    /**
	 * 查询所有终端中所有的固件版本
	 *
	 * @return List<String>
	 */
    List<String> listAllFirmwareVersion();
    
    /**
     * 终端升级分页筛选查询终端
     * @param softVer  软件版本
     * @param firmVer  固件版本 
     * @param deviceStatus  终端状态（在线OR离线）
     * @param modelName 终端型号
     * @param province 省
     * @param city 市
     * @param area 区
     * @param companyName 商家名称
     * @param pageNum
     * @param pageSize
     * @return
     */
	PageInfo<CkUpgradeDeviceListVO> listUpgradeDeviceByPage(String softVer, String firmVer, Integer deviceStatus,
			String modelName, String province, String city, String area, String companyName, Integer pageNum,
			Integer pageSize);
	
	/**
	 * 条件查询终端统计符合条件的终端数量
     * @param softVer  软件版本
     * @param firmVer  固件版本 
     * @param deviceStatus  终端状态（在线OR离线）
     * @param modelName 终端型号
     * @param province 省
     * @param city 市
     * @param area 区
     * @param companyName 商家名称
	 * @return
	 */
	Long getDeviceCountByCondition(String softVer, String firmVer, Integer deviceStatus, String modelName,
			String province, String city, String area, String companyName);
}
